from PyQt6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel,
                             QPushButton, QTextEdit, QComboBox, QListWidget,
                             QSplitter, QFrame, QMessageBox)
from PyQt6.QtCore import Qt, QSize

class BaseApp(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
        self.setMinimumSize(QSize(800, 600))

    def init_ui(self):
        main_splitter = QSplitter(Qt.Orientation.Horizontal)  # 水平分割主界面

        # 左侧区域
        left_widget = QWidget()
        left_layout = QVBoxLayout()
        left_layout.setContentsMargins(5, 5, 5, 5)
        left_layout.setSpacing(5)

        # 操作按钮区域
        btn_layout = QHBoxLayout()
        self.upload_btn = QPushButton("📁 添加图片")
        self.add_folder_btn = QPushButton("📂 添加文件夹")  # 新增文件夹按钮
        self.clear_btn = QPushButton("❌ 清空列表")  # 新增清空按钮
        btn_layout.addWidget(self.upload_btn)
        btn_layout.addWidget(self.add_folder_btn)
        btn_layout.addWidget(self.clear_btn)
        left_layout.addLayout(btn_layout)

        # 图片列表
        self.image_list = QListWidget()
        self.image_list.setMinimumWidth(300)
        self.image_list.itemClicked.connect(self.on_image_selected)
        left_layout.addWidget(QLabel("已选图片列表:"))
        left_layout.addWidget(self.image_list)

        # 图片预览
        self.image_label = QLabel()
        self.image_label.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.image_label.setStyleSheet("""border: 2px dashed #ccc;
            background-color: #f8f9fa;
            border-radius: 8px;
            min-height: 300px;""")
        left_layout.addWidget(self.image_label)

        left_widget.setLayout(left_layout)
        main_splitter.addWidget(left_widget)

        # 右侧区域
        right_widget = QWidget()
        right_layout = QVBoxLayout()
        right_layout.setContentsMargins(5, 5, 5, 5)
        right_layout.setSpacing(5)

        # 操作按钮
        top_right_layout = QHBoxLayout()
        self.lang_combo = QComboBox()
        self.lang_combo.addItems(["中文", "英文"])
        self.ocr_btn = QPushButton("🔍 开始批量识别")
        self.ocr_btn.setStyleSheet("""
            QPushButton {
                background-color: #2196F3;
                color: white;
                padding: 10px;
                font-size: 16px;
                border-radius: 5px;
                min-width: 150px;
            }
            QPushButton:hover { background-color: #1976D2; }
        """)
        self.help_btn = QPushButton("❓")
        self.help_btn.setFixedSize(30, 30)
        self.help_btn.clicked.connect(self.show_help)

        # 调整布局比例
        top_right_layout.addWidget(self.ocr_btn, 4)
        top_right_layout.addWidget(QLabel("识别语言:"), 1)
        top_right_layout.addWidget(self.lang_combo, 2)
        top_right_layout.addWidget(self.help_btn, 1)
        right_layout.addLayout(top_right_layout)

        # 结果展示区域
        result_frame = QFrame()
        result_frame.setFrameShape(QFrame.Shape.StyledPanel)
        result_layout = QVBoxLayout()
        self.result_area = QTextEdit()
        self.result_area.setReadOnly(True)
        self.result_area.setStyleSheet("font-family: 'Consolas'; font-size: 12px;")
        result_layout.addWidget(QLabel("识别结果:"))
        result_layout.addWidget(self.result_area)
        result_frame.setLayout(result_layout)
        right_layout.addWidget(result_frame)

        # 底部操作按钮
        bottom_right_layout = QHBoxLayout()
        self.input_filename_btn = QPushButton("✏️ 命名文件")
        self.select_folder_btn = QPushButton("📂 保存位置")
        self.save_excel_btn = QPushButton("💾 保存结果")
        bottom_right_layout.addWidget(self.input_filename_btn)
        bottom_right_layout.addWidget(self.select_folder_btn)
        bottom_right_layout.addWidget(self.save_excel_btn)
        right_layout.addLayout(bottom_right_layout)

        right_widget.setLayout(right_layout)
        main_splitter.addWidget(right_widget)

        # 设置左右面板的显示比例（左1右2）
        main_splitter.setStretchFactor(0, 1)
        main_splitter.setStretchFactor(1, 2)

        main_layout = QVBoxLayout()
        main_layout.addWidget(main_splitter)
        self.setLayout(main_layout)

    def on_image_selected(self, item):
        """当点击图片列表项时显示预览"""
        pass  # 将在主代码中实现

    # 帮助按钮
    def show_help(self):
        help_text = """
        <h3>OCR文字识别工具 - 使用指南</h3>
        <p><strong>添加内容</strong></p>
        <ul>
            <li>📁 添加图片：支持单张/多张图片上传（支持拖放）</li>
            <li>📂 添加文件夹：递归扫描文件夹内所有图片（支持拖放文件夹）</li>
            <li>❌ 清空列表：一键移除所有已选图片</li>
        </ul>

        <p><strong>识别设置</strong></p>
        <ul>
            <li>🔍 开始批量识别：自动预处理图片并识别文字（支持中英文切换）</li>
            <li>🔍 图片预览：点击左侧列表项可查看图片缩略图</li>
        </ul>

        <p><strong>结果管理</strong></p>
        <ul>
            <li>💾 保存结果：支持 Excel（自动合并字段）和文本格式（带时间戳）</li>
            <li>📂 保存位置：默认当前文件夹，可自定义输出路径</li>
            <li>✏️ 命名文件：自定义输出文件名（无需输入扩展名）</li>
        </ul>

        <p><strong>高级特性</strong></p>
        <ul>
            <li>🔧 智能解析：自动识别简历字段（教育/经历/技能等）</li>
            <li>📊 Excel优化：动态列宽调整、多行文本换行、追加写入</li>
            <li>⏱ 预处理流程：自动增强对比度+二值化提升识别率</li>
        </ul>

        <p><strong>不足</strong></p>
        <ul>
            <li>保存为excel功能只能对某一类的简历有效。</li>
        </ul>
        """
        QMessageBox.about(self, "帮助", help_text)